svd&machine learning
-

  • 引言

先来看一个例子

假设该矩阵表示6名观众对4部电影《肖申克的救赎》、《非常嫌疑犯》、《教父》以及《谋杀绿脚趾》的评分。
《教父》看起来获得了最高的平均分1.5分,而《肖申克的救赎》得分较低有0.5分的平均得分。
我们进一步将矩阵分解

分别对分解出的三个矩阵命名为A/B/C矩阵。不难看出A矩阵和C矩阵都是由0和1组成的布尔矩阵,B矩阵则是对角矩阵。

C矩阵体现了影片(列)与类型(行)的关系:《肖申克的救赎》与《非常嫌疑犯》分别属于不同题材的电影,即戏剧题材和犯罪题材【ps:个人认为《肖申克的救赎》应该也与《非常嫌疑犯》一样属于犯罪题材,作者举例可能有些不当】,《教父》同时属于两种题材,《谋杀绿脚趾》在属于犯罪题材的同时又引入了新的喜剧题材。

A矩阵表达了这6名观众对电影题材的偏好,观众A/D/E喜爱喜剧题材,观众B/D/E喜爱犯罪题材,观众C/E/F热衷于喜剧。

B矩阵表达了在决定观众对影片的喜好时,犯罪题材所起的作用是其他两种题材的两倍。

  • 奇异值
  • 奇异值分解(Singular Value Decomposition)是线性代数中一种重要的矩阵分解,是矩阵分析中正规矩阵酉对角化的推广。在信号处理、统计学等领域有重要应用。
    A=URV
    假设A是一个M N的矩阵,那么得到的U是一个M L的方阵(里面的向量是正交的,U里面的向量称为左奇异向量),R是一个L L的矩阵(除了对角线的元素都是0,对角线上的元素称为奇异值),V 是一个L N的矩阵,里面的向量也是正交的,V里面的向量称为右奇异向量)。
    那么奇异值和特征值是怎么对应起来的呢?首先,我们将一个矩阵A的转置 * A,将会得到一个方阵,我们用这个方阵求特征值可以得到:

这里得到的v,就是右奇异向量。此外

这里的σ就是上面说的奇异值,u就是上面说的左奇异向量。奇异值σ跟特征值类似,在矩阵Σ中也是从大到小排列,而且σ的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前r大的奇异值来近似描述矩阵,这里定义一下部分奇异值分解:

r是一个远小于m、n的数,这样矩阵的乘法看起来像是下面的样子:

后续
在matlab中使用svd&svds函数对第一个矩阵进行奇异值分解,得到的结果和书上编者给出的有较大的差距

[U,S,V]=svds(a,3)

U =

-0.1076 0.6224 -0.0327
-0.4933 -0.2291 0.3227
-0.0880 -0.2069 -0.5911
-0.6010 0.3933 0.2901
-0.1956 0.4155 -0.6238
-0.5813 -0.4360 -0.2684

S =

6.9232         0         0
     0    1.9302         0
     0         0    1.1593

V =

-0.1306 0.7414 -0.3160
-0.4840 -0.2816 0.5942
-0.6147 0.4599 0.2782
-0.6090 -0.3994 -0.6853

可以看出奇异值分解得到的矩阵并不是由整数组成的矩阵,可以理解为编者为了让读者比较容易理解而特别设计的一个分解(逆分解合成)的例子。
虽然例子可能不成立,但毫无疑问,奇异值分解还是可以给我们对矩阵的分析提供很大的帮助的,从而使我们建立起基于SVD的根据用户偏好进行商品推荐的协同过滤推荐系统。
-

  • 引用:

[1]《机器学习》-PeterFlach

[2] 《强大的矩阵奇异值分解(SVD)及其应用》-LeftNotEasy